<?php
/**
 * 使用字符组成的图形显示迷宫
 */
class MazeOutput
{
    /**
     * 输出一行完整的墙
     */
    public function fetch_whole_mode($width)
    {
        $line="▉";
        for($i=0; $i<$width; $i++){
            $line.="▉▉";
        }
        return $line;
    }
    /**
     * 输出一行元素(显示为空心)和横向相邻元素之间的墙
     */
    public function fetch_horiz_mode($data)
    {
        $line="▉";
        foreach($data as $item){
            $line .= "　" . ($item[0] === 0 ? "▉" : "　");
        }
        return $line;
    }
    /**
     * 输出一行纵向相邻的元素之间和对角线上的墙(显示为实心)
     */
    public function fetch_vertical_mode($data)
    {
        $line="▉";
        foreach($data as $item){
            $line .= ($item[1] === 0 ? "▉" : "　") . "▉";
        }
        return $line;
    }
    /**
     * 输出迷宫
     * @param Maze $maze 迷宫
     */
    public function fetch($maze)
    {
        $array=$maze->getWallStatusData();
        //输出迷宫上边界
        $output="▉　".$this->fetch_whole_mode($maze->width-1)."\r\n";
        //循环输出迷宫的每一行，除了最后一行
        for($i=0; $i<$maze->height-1; $i++){
            $output.=$this->fetch_horiz_mode($array[$i])."\r\n";
            $output.=$this->fetch_vertical_mode($array[$i])."\r\n";
        }
        //输出迷宫最后一行和下边界
        $output.=$this->fetch_horiz_mode($array[$i])."\r\n";
        $output.=$this->fetch_whole_mode($maze->width-1)."　▉"."\r\n\r\n";
        return $output;
    }
}
